﻿using System.Net.Sockets;
using System;

namespace Sofire.DataComm.Net
{
    /// <summary>
    /// 表示 <see cref="System.IAsyncResult.AsyncState"/> 的用户自定义数据。
    /// </summary>
    public abstract class SocketStateObjectBase
    {
        /// <summary>
        /// 获取字节数据来源的 <see cref="System.Net.Sockets.Socket"/>。
        /// </summary>
        public readonly Socket RemoteSocket;

        /// <summary>
        /// 获取当前接收缓冲区数据。
        /// </summary>
        public byte[] Buffer;

        /// <summary>
        /// 自定义数据。
        /// </summary>
        public object Tag;

        /// <summary>
        /// 初始化 <see cref="Sofire.DataComm.Net.SocketStateObjectBase"/> 的新实例。
        /// </summary>
        /// <param name="remoteSocket">一个<see cref="System.Net.Sockets.Socket"/>。</param>
        public SocketStateObjectBase(Socket remoteSocket)
        {
            if(remoteSocket == null) throw new ArgumentNullException("remoteSocket");
            this.RemoteSocket = remoteSocket;
        }
    }
}
